<?php
	/**
	  * @package	MyDebuger
	  * @name		HTMLFormatter
	  * @brief		Classe abstracta para la utilizacion de mensajes con colores y formatos
	  * @author		Hermann D. Schimpf <hschimpf@gschimpf.com>
	  * @license	http://opensource.org/licenses/gpl-2.0.php
	  * @date		2009-12-24
	  * @version	0.1.0
  	**/

	abstract class HTMLFormatter implements MyVersions {
		/* version de la clase */
		private static $version			= 0;
		/* subversion de la clase */
		private static $subversion		= 1;
		/* numero de revision de la clase */
		private static $revision		= 0;

		/* valor para el color rojo */
		private $redColor				= 'c00';
		/* valor para el color verde */
		private $greenColor			= '060';
		/* valor para el color azul */
		private $blueColor			= '00a';
		/* valor para el color amarillo */
		private $yellowColor			= 'ca0';

		public static function getVersion() {
			/* retornamos la version actual de la clase */
			return 'v' . self::$version . '.' . self::$subversion . '.' . self::$revision;
		}

		protected final function italic($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, 'font-style:italic');
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected final function bold($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, 'font-weight:bold');
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected final function underline($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, 'text-decoration:underline');
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected final function blink($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, 'text-decoration:blink');
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected final function red($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, "color:#{$this->redColor}");
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected final function green($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, "color:#{$this->greenColor}");
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected final function blue($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, "color:#{$this->blueColor}");
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected final function yellow($stringText = Null) {
			try {
				try {
					/* verificamos si especifico la cadena */
					if ($stringText === Null)
						/* salimos con una excepcion */
						$this->newException('No se especifico la cadena a formatear');
					/* formateamos y retornamos la cadena formateada */
					return $this->getFormat($stringText, "color:#{$this->yellowColor}");
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}

		protected function cleanHTML($stringText) {
			/* reemplazamos algunos simbolos especiales por su codigo */
			$stringText = str_replace(Array('<', '>'), Array('&lt;', '&gt;'), $stringText);
			/* retornamos la cadena formateada */
			return str_replace(Array('|font', '|/font|', '\'|'), Array('<font', '</font>', '\'>'), $stringText);
		}

		private function getFormat($text, $style) {
			/* retornamos la cadena con formato */
			return "|font style='$style;'|$text|/font|";
		}
	}
?>